JavaScript Iterator Helpersμ κ°λ ₯ν κΈ°λ₯μ νμ©νμ¬ ν¨μ¨μ μ΄κ³ μ°μν λ°μ΄ν° μ‘°μμ κ²½ννμΈμ. μ§μ° νκ°, μ±λ₯ μ΅μ ν λ° μ€μ μμλ₯Ό ν΅ν μ€μ©μ μΈ μμ© λΆμΌλ₯Ό νꡬν©λλ€.
JavaScript Iterator Helpers: μ§μ° μνμ€ μ²λ¦¬ λ§μ€ν°νκΈ°
JavaScript μ΄ν°λ μ΄ν° ν¬νΌλ λ°μ΄ν° μνμ€λ₯Ό μ²λ¦¬νλ λ°©μμ μμ΄ μλΉν λ°μ μ μλ―Έν©λλ€. ECMAScriptμ Stage 3 μ μμΌλ‘ λμ λ μ΄ ν¬νΌλ νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈ λλ 볡μ‘ν λ³νμ μ²λ¦¬ν λ κΈ°μ‘΄ λ°°μ΄ λ©μλμ λΉν΄ λ ν¨μ¨μ μ΄κ³ ννμ μΈ μ κ·Ό λ°©μμ μ 곡ν©λλ€. μ΄λ€μ μ΄ν°λ μ΄ν°μμ μλνλ λ©μλ μ§ν©μ μ 곡νμ¬ μ§μ° νκ° λ° ν₯μλ μ±λ₯μ κ°λ₯νκ² ν©λλ€.
μ΄ν°λ μ΄ν° λ° μ λλ μ΄ν° μ΄ν΄νκΈ°
μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μμΈν μ΄ν΄λ³΄κΈ° μ μ, μ΄ ν¬νΌμ κΈ°λ°μ΄ λλ μ΄ν°λ μ΄ν°μ μ λλ μ΄ν°μ λν΄ κ°λ΅ν μ΄ν΄λ³΄κ² μ΅λλ€.
μ΄ν°λ μ΄ν°
μ΄ν°λ μ΄ν°λ μνμ€λ₯Ό μ μνκ³ , μ’
λ£ μ μ μ¬μ μΌλ‘ λ°ν κ°μ κ°μ§ μ μλ κ°μ²΄μ
λλ€. ꡬ체μ μΌλ‘, μ΄ν°λ μ΄ν°λ λ€μ λ κ°μ§ μμ±μ κ°μ§ κ°μ²΄λ₯Ό λ°ννλ next() λ©μλλ₯Ό κ°μ§μΌλ‘μ¨ μ΄ν°λ μ΄ν° νλ‘ν μ½μ ꡬννλ λͺ¨λ κ°μ²΄μ
λλ€:
value: μνμ€μ λ€μ κ°μ λλ€.done: μ΄ν°λ μ΄ν°κ° μλ£λμλμ§ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λλ€.trueλ μνμ€μ λμ μλ―Έν©λλ€.
λ°°μ΄, Map, Set, λ¬Έμμ΄μ λͺ¨λ JavaScriptμ λ΄μ₯ μ΄ν°λ¬λΈ κ°μ²΄μ μμ
λλ€. μ°λ¦¬λ [Symbol.iterator]() λ©μλλ₯Ό ν΅ν΄ μ΄λ€ κ°κ°μ λν μ΄ν°λ μ΄ν°λ₯Ό μ»μ μ μμ΅λλ€.
const array = [1, 2, 3];
const iterator = array[Symbol.iterator]();
console.log(iterator.next()); // Output: { value: 1, done: false }
console.log(iterator.next()); // Output: { value: 2, done: false }
console.log(iterator.next()); // Output: { value: 3, done: false }
console.log(iterator.next()); // Output: { value: undefined, done: true }
μ λλ μ΄ν°
μ λλ μ΄ν°λ μΌμ μ μ§ λ° μ¬κ°λ μ μλ νΉμν μ νμ ν¨μλ‘, μκ°μ΄ μ§λ¨μ λ°λΌ μΌλ ¨μ κ°μ μμ±ν μ μμ΅λλ€. μ΄λ€μ function* ꡬ문μ μ¬μ©νμ¬ μ μλλ©°, yield ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ λ°©μΆν©λλ€.
function* numberGenerator() {
yield 1;
yield 2;
yield 3;
}
const generator = numberGenerator();
console.log(generator.next()); // Output: { value: 1, done: false }
console.log(generator.next()); // Output: { value: 2, done: false }
console.log(generator.next()); // Output: { value: 3, done: false }
console.log(generator.next()); // Output: { value: undefined, done: true }
μ λλ μ΄ν°λ μλμΌλ‘ μ΄ν°λ μ΄ν°λ₯Ό μμ±νλ―λ‘, λ°μ΄ν° μνμ€λ₯Ό λ€λ£¨λ κ°λ ₯ν λκ΅¬κ° λ©λλ€.
μ΄ν°λ μ΄ν° ν¬νΌ μκ°
μ΄ν°λ μ΄ν° ν¬νΌλ μ΄ν°λ μ΄ν°μμ μ§μ μλνλ λ©μλ μ§ν©μ μ 곡νμ¬ ν¨μν νλ‘κ·Έλλ° μ€νμΌκ³Ό μ§μ° νκ°λ₯Ό κ°λ₯νκ² ν©λλ€. μ΄λ κ°μ΄ μ€μ λ‘ νμν λλ§ μ°μ°μ΄ μνλ¨μ μλ―Ένλ©°, νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ μ μ¬μ μΈ μ±λ₯ ν₯μμΌλ‘ μ΄μ΄μ§λλ€.
μ£Όμ μ΄ν°λ μ΄ν° ν¬νΌλ λ€μκ³Ό κ°μ΅λλ€:
.map(callback): μ 곡λ μ½λ°± ν¨μλ₯Ό μ¬μ©νμ¬ μ΄ν°λ μ΄ν°μ κ° μμλ₯Ό λ³νν©λλ€..filter(callback): μ 곡λ μ½λ°± ν¨μλ₯Ό κΈ°λ°μΌλ‘ μ΄ν°λ μ΄ν°μ μμλ₯Ό νν°λ§ν©λλ€..take(limit): μ΄ν°λ μ΄ν°μ μμ λΆλΆλΆν° μ§μ λ μμ μμλ₯Ό κ°μ Έμ΅λλ€..drop(count): μ΄ν°λ μ΄ν°μ μμ λΆλΆλΆν° μ§μ λ μμ μμλ₯Ό μμ ν©λλ€..reduce(callback, initialValue): λμ°κΈ°μ μ΄ν°λ μ΄ν°μ κ° μμ(μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘)μ ν¨μλ₯Ό μ μ©νμ¬ λ¨μΌ κ°μΌλ‘ μ€μ λλ€..toArray(): μ΄ν°λ μ΄ν°λ₯Ό μλΉνκ³ λͺ¨λ κ°μ λ°°μ΄λ‘ λ°νν©λλ€..forEach(callback): μ΄ν°λ μ΄ν°μ κ° μμμ λν΄ μ 곡λ ν¨μλ₯Ό ν λ² μ€νν©λλ€..some(callback): μ΄ν°λ μ΄ν°μ μ μ΄λ νλμ μμκ° μ 곡λ ν¨μμ μν΄ κ΅¬νλ ν μ€νΈλ₯Ό ν΅κ³Όνλμ§ ν μ€νΈν©λλ€. μ΄ν°λ μ΄ν°μμ μ 곡λ ν¨μκ° trueλ₯Ό λ°ννλ μμλ₯Ό μ°ΎμΌλ©΄ trueλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ falseλ₯Ό λ°νν©λλ€. μ΄ν°λ μ΄ν°λ₯Ό μμ νμ§ μμ΅λλ€..every(callback): μ΄ν°λ μ΄ν°μ λͺ¨λ μμκ° μ 곡λ ν¨μμ μν΄ κ΅¬νλ ν μ€νΈλ₯Ό ν΅κ³Όνλμ§ ν μ€νΈν©λλ€. μ΄ν°λ μ΄ν°μ λͺ¨λ μμκ° ν μ€νΈλ₯Ό ν΅κ³Όνλ©΄ trueλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ falseλ₯Ό λ°νν©λλ€. μ΄ν°λ μ΄ν°λ₯Ό μμ νμ§ μμ΅λλ€..find(callback): μ 곡λ ν μ€νΈ ν¨μλ₯Ό λ§μ‘±νλ μ΄ν°λ μ΄ν°μ 첫 λ²μ§Έ μμμ κ°μ λ°νν©λλ€. λ§μ‘±νλ κ°μ΄ μμΌλ©΄ undefinedκ° λ°νλ©λλ€.
μ΄ ν¬νΌλ€μ 체μ΄λμ΄ κ°λ₯νμ¬ κ°κ²°νκ³ κ°λ μ± μλ λ°©μμΌλ‘ 볡μ‘ν λ°μ΄ν° μ²λ¦¬ νμ΄νλΌμΈμ μμ±ν μ μμ΅λλ€. νμ¬ λ μ§ κΈ°μ€μΌλ‘ μ΄ν°λ μ΄ν° ν¬νΌκ° λͺ¨λ λΈλΌμ°μ μμ κΈ°λ³Έμ μΌλ‘ μ§μλμ§λ μμ΅λλ€. λ€μν νκ²½μμ νΈνμ±μ μ 곡νκΈ° μν΄ core-jsμ κ°μ ν΄λ¦¬ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν΄μΌ ν μλ μμ΅λλ€. κ·Έλ¬λ μ μμ λ¨κ³λ‘ λ³Ό λ, ν₯ν κ΄λ²μν κΈ°λ³Έ μ§μμ΄ μμλ©λλ€.
μ§μ° νκ°: μ¨λ맨λ μ²λ¦¬μ ν
μ΄ν°λ μ΄ν° ν¬νΌμ ν΅μ¬ μ΄μ μ μ§μ° νκ° κΈ°λ₯μ μμ΅λλ€. .map() λ° .filter()μ κ°μ κΈ°μ‘΄ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νλ©΄ μ²λ¦¬ νμ΄νλΌμΈμ κ° λ¨κ³μμ μ€κ° λ°°μ΄μ΄ μμ±λ©λλ€. μ΄λ νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ λΉν¨μ¨μ μΌ μ μμΌλ©°, λ©λͺ¨λ¦¬μ μ²λ¦¬ λ₯λ ₯μ μλͺ¨ν©λλ€.
λ°λ©΄μ μ΄ν°λ μ΄ν° ν¬νΌλ κ°μ΄ μ€μ λ‘ νμν λλ§ μ°μ°μ μνν©λλ€. μ΄λ μ΄ν°λ μ΄ν°κ° μλΉλ¨μ λ°λΌ λ³νμ΄ μ¨λ맨λ λ°©μμΌλ‘ μ μ©λ¨μ μλ―Έν©λλ€. μ΄λ¬ν μ§μ° νκ° μ κ·Ό λ°©μμ νΉν 무ν μνμ€ λλ μ¬μ© κ°λ₯ν λ©λͺ¨λ¦¬λ³΄λ€ ν° λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ μλΉν μ±λ₯ ν₯μμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
λ€μμ μ¦μ (λ°°μ΄ λ©μλ) νκ°μ μ§μ° (μ΄ν°λ μ΄ν° ν¬νΌ) νκ°μ μ°¨μ΄λ₯Ό 보μ¬μ£Όλ μμμ λλ€:
// Eager evaluation (using array methods)
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenSquares = numbers
.filter(num => num % 2 === 0)
.map(num => num * num)
.slice(0, 3); // Only take the first 3
console.log(evenSquares); // Output: [ 4, 16, 36 ]
// Lazy evaluation (using iterator helpers - requires polyfill)
// Assuming a 'from' function is available from a polyfill (e.g., core-js)
// to create an iterator from an array
import { from } from 'core-js/features/iterator';
const numbersIterator = from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
const lazyEvenSquares = numbersIterator
.filter(num => num % 2 === 0)
.map(num => num * num)
.take(3)
.toArray(); // Convert to array to consume the iterator
console.log(lazyEvenSquares); // Output: [ 4, 16, 36 ]
μ¦μ νκ° μμ μμλ .filter() μ°μ° ν νλ, .map() μ°μ° ν λ λ€λ₯Έ λ κ°μ μ€κ° λ°°μ΄μ΄ μμ±λ©λλ€. μ§μ° νκ° μμ μμλ μ€κ° λ°°μ΄μ΄ μμ±λμ§ μμ΅λλ€. .toArray() λ©μλμ μν΄ μ΄ν°λ μ΄ν°κ° μλΉλ λ λ³νμ΄ μ¨λ맨λ λ°©μμΌλ‘ μ μ©λ©λλ€.
μ€μ©μ μΈ μμ© λ° μμ
μ΄ν°λ μ΄ν° ν¬νΌλ κ΄λ²μν λ°μ΄ν° μ²λ¦¬ μλ리μ€μ μ μ©λ μ μμ΅λλ€. λ€μμ κ·Έ λ€μ¬λ€λ₯ν¨μ 보μ¬μ£Όλ λͺ κ°μ§ μμμ λλ€:
λμ©λ λ‘κ·Έ νμΌ μ²λ¦¬
μλ°±λ§ μ€μ λ°μ΄ν°κ° ν¬ν¨λ λ°©λν λ‘κ·Έ νμΌμ΄ μλ€κ³ μμν΄ λ³΄μμμ€. κΈ°μ‘΄ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νμ¬ μ΄ νμΌμ μ²λ¦¬νλ κ²μ λΉν¨μ¨μ μ΄κ³ λ©λͺ¨λ¦¬ μ§μ½μ μΌ μ μμ΅λλ€. μ΄ν°λ μ΄ν° ν¬νΌλ λ νμ₯ κ°λ₯ν μ루μ μ μ 곡ν©λλ€.
// Assuming you have a function to read the log file line by line and yield each line as an iterator
function* readLogFile(filePath) {
// Implementation to read the file and yield lines
// (This would typically involve asynchronous file I/O)
yield 'Log entry 1';
yield 'Log entry 2 - ERROR';
yield 'Log entry 3';
yield 'Log entry 4 - WARNING';
yield 'Log entry 5';
// ... potentially millions of lines
}
// Process the log file using iterator helpers (requires polyfill)
import { from } from 'core-js/features/iterator';
const logIterator = from(readLogFile('path/to/logfile.txt'));
const errorMessages = logIterator
.filter(line => line.includes('ERROR'))
.map(line => line.trim())
.toArray();
console.log(errorMessages); // Output: [ 'Log entry 2 - ERROR' ]
μ΄ μμ μμ readLogFile ν¨μ(μ¬κΈ°μλ νλ μ΄μ€νλμ΄λ©° μ€μ νμΌ I/O ꡬνμ΄ νμν¨)λ λ‘κ·Έ λΌμΈμ μ΄ν°λ μ΄ν°λ₯Ό μμ±ν©λλ€. κ·Έλ° λ€μ μ΄ν°λ μ΄ν° ν¬νΌλ "ERROR"λ₯Ό ν¬ν¨νλ λΌμΈμ νν°λ§νκ³ κ³΅λ°±μ μ κ±°ν λ€μ κ²°κ³Όλ₯Ό λ°°μ΄λ‘ μμ§ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ 체 λ‘κ·Έ νμΌμ ν λ²μ λ©λͺ¨λ¦¬μ λ‘λνλ κ²μ λ°©μ§νμ¬ λ§€μ° ν° νμΌμ μ²λ¦¬νλ λ° μ ν©ν©λλ€.
무ν μνμ€ μμ
μ΄ν°λ μ΄ν° ν¬νΌλ 무ν μνμ€ μμ μλ μ¬μ©λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, νΌλ³΄λμΉ μμ 무ν μνμ€λ₯Ό μμ±ν λ€μ μ²μ λͺ κ°μ μμλ₯Ό μΆμΆν μ μμ΅λλ€.
// Generate an infinite sequence of Fibonacci numbers
function* fibonacciSequence() {
let a = 0;
let b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
// Extract the first 10 Fibonacci numbers using iterator helpers (requires polyfill)
import { from } from 'core-js/features/iterator';
const fibonacciIterator = from(fibonacciSequence());
const firstTenFibonacci = fibonacciIterator
.take(10)
.toArray();
console.log(firstTenFibonacci); // Output: [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ]
μ΄ μμ λ μ§μ° νκ°μ κ°λ ₯ν¨μ 보μ¬μ€λλ€. fibonacciSequence μ λλ μ΄ν°λ 무ν μνμ€λ₯Ό μμ±νμ§λ§, μ΄ν°λ μ΄ν° ν¬νΌλ .take(10) λ° .toArray() λ©μλμ μν΄ μ€μ λ‘ νμν λλ§ μ²μ 10κ°μ μ«μλ₯Ό κ³μ°ν©λλ€.
λ°μ΄ν° μ€νΈλ¦Ό μ²λ¦¬
μ΄ν°λ μ΄ν° ν¬νΌλ λ€νΈμν¬ μμ²μ΄λ μ€μκ° μΌμμ κ°μ λ°μ΄ν° μ€νΈλ¦Όκ³Ό ν΅ν©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ 체 λ°μ΄ν° μΈνΈλ₯Ό λ©λͺ¨λ¦¬μ λ‘λν νμ μμ΄ λ°μ΄ν°κ° λμ°©νλ μ¦μ μ²λ¦¬ν μ μμ΅λλ€.
// (Conceptual example - assumes some form of asynchronous stream API)
// Asynchronous function simulating a data stream
async function* dataStream() {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
}
async function processStream() {
//Wrap the async generator in a standard iterator
const asyncIterator = dataStream();
function wrapAsyncIterator(asyncIterator) {
return {
[Symbol.iterator]() {
return this;
},
next: async () => {
const result = await asyncIterator.next();
return result;
},
};
}
const iterator = wrapAsyncIterator(asyncIterator);
import { from } from 'core-js/features/iterator';
const iteratorHelpers = from(iterator);
const processedData = await iteratorHelpers.filter(x => x % 2 === 0).toArray();
console.log(processedData);
}
processStream();
μ΄ν°λ μ΄ν° ν¬νΌ μ¬μ©μ μ΄μ
μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό μ¬μ©νλ©΄ κΈ°μ‘΄ λ°°μ΄ λ©μλμ λΉν΄ μ¬λ¬ κ°μ§ μ΄μ μ΄ μμ΅λλ€:
- μ±λ₯ ν₯μ: μ§μ° νκ°λ νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈμ κ²½μ° λ©λͺ¨λ¦¬ μλΉ λ° μ²λ¦¬ μκ°μ μ€μ¬μ€λλ€.
- κ°λ μ± ν₯μ: 체μ΄λ κ°λ₯ν λ©μλλ κ°κ²°νκ³ ννμ μΈ λ°μ΄ν° μ²λ¦¬ νμ΄νλΌμΈμ μμ±ν©λλ€.
- ν¨μν νλ‘κ·Έλλ° μ€νμΌ: λ°μ΄ν° μ‘°μμ λν ν¨μν μ κ·Ό λ°©μμ μ₯λ €νμ¬ μ½λ μ¬μ¬μ©μ±κ³Ό μ μ§λ³΄μμ±μ λμ λλ€.
- 무ν μνμ€ μ§μ: μ μ¬μ μΌλ‘ 무νν λ°μ΄ν° μ€νΈλ¦Ό μμ μ΄ κ°λ₯ν©λλ€.
κ³ λ € μ¬ν λ° λͺ¨λ² μ¬λ‘
μ΄ν°λ μ΄ν° ν¬νΌλ μλΉν μ΄μ μ μ 곡νμ§λ§, λ€μ μ¬νμ κ³ λ €νλ κ²μ΄ μ€μν©λλ€:
- λΈλΌμ°μ νΈνμ±: μ΄ν°λ μ΄ν° ν¬νΌλ μμ§ λΉκ΅μ μλ‘μ΄ κΈ°λ₯μ΄λ―λ‘, κΈ°λ³Έ ꡬνμ΄ λ리 보κΈλ λκΉμ§ λ λμ λΈλΌμ°μ μ§μμ μν΄ ν΄λ¦¬ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. νμ λμ νκ²½μμ μ½λλ₯Ό ν μ€νΈνμμμ€.
- λλ²κΉ : μ§μ° νκ°λ μ½λλ₯Ό λλ²κΉ νλ κ²μ μ¦μ νκ°λ μ½λλ₯Ό λλ²κΉ νλ κ²λ³΄λ€ λ μ΄λ €μΈ μ μμ΅λλ€. λλ²κΉ λꡬ λ° κΈ°μ μ μ¬μ©νμ¬ μ€νμ λ¨κ³λ³λ‘ μ§ννκ³ νμ΄νλΌμΈμ κ° λ¨κ³μμ κ°μ κ²μ¬νμμμ€.
- μ€λ²ν€λ: μ§μ° νκ°κ° μΌλ°μ μΌλ‘ λ ν¨μ¨μ μ΄μ§λ§, μ΄ν°λ μ΄ν°λ₯Ό μμ±νκ³ κ΄λ¦¬νλ λ° μ½κ°μ μ€λ²ν€λκ° μμ μ μμ΅λλ€. κ²½μ°μ λ°λΌ λ§€μ° μμ λ°μ΄ν° μΈνΈμ κ²½μ° μ€λ²ν€λκ° μ΄μ μ μνν μ μμ΅λλ€. μ μ¬μ μΈ μ±λ₯ λ³λͺ© νμμ μλ³νκΈ° μν΄ νμ μ½λλ₯Ό νλ‘νμΌλ§νμμμ€.
- μ€κ° μν: μ΄ν°λ μ΄ν° ν¬νΌλ μνλ₯Ό μ μ₯νμ§ μλλ‘ μ€κ³λμμ΅λλ€. μ€ν μμκ° νμ μμΈ‘ κ°λ₯νμ§ μμ μ μμΌλ―λ‘, μ΄ν°λ μ΄ν° νμ΄νλΌμΈ λ΄μ μ΄λ€ μ€κ° μνμλ μμ‘΄νμ§ λ§μμμ€.
κ²°λ‘
JavaScript μ΄ν°λ μ΄ν° ν¬νΌλ λ°μ΄ν° μνμ€λ₯Ό μ²λ¦¬νλ κ°λ ₯νκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€. νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈ, 무ν μνμ€ λλ λ°μ΄ν° μ€νΈλ¦Όμ λ€λ£° λ μ΄λ€μ μ§μ° νκ° κΈ°λ₯κ³Ό ν¨μν νλ‘κ·Έλλ° μ€νμΌμ κΈ°μ‘΄ λ°°μ΄ λ©μλμ λΉν΄ μλΉν μ΄μ μ μ 곡ν©λλ€. μ΄ν°λ μ΄ν°, μ λλ μ΄ν° λ° μ§μ° νκ°μ μ리λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ μ΄ν°λ μ΄ν° ν¬νΌλ₯Ό νμ©νμ¬ λ μ±λ₯μ΄ μ’κ³ , κ°λ μ±μ΄ λμΌλ©°, μ μ§λ³΄μ κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€. λΈλΌμ°μ μ§μμ΄ κ³μ μ¦κ°ν¨μ λ°λΌ μ΄ν°λ μ΄ν° ν¬νΌλ λ°μ΄ν° μ§μ½μ μΈ μ ν리μΌμ΄μ μ κ°λ°νλ JavaScript κ°λ°μμκ² μ μ λ μ€μν λκ΅¬κ° λ κ²μ λλ€. μ§μ° μνμ€ μ²λ¦¬μ νμ λ°μλ€μ΄κ³ JavaScript μ½λμμ μλ‘μ΄ μμ€μ ν¨μ¨μ±μ μ κΈ ν΄μ νμμμ€.